#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>

const char *file[] = {"/home/zzy/code/9.19/mycmd"}; 



int main()
{
  pid_t id = fork();
  if(id == 0)
  {
    // 
    int c = 5;
    while(c)
    {
      printf("子进程：%d\n",c--);
      sleep(1);
    }
    exit(11);
  }
  else 
  {
    // 父进程
    int status = 0;
    // id > 0 等待指定进程
    // id == 0 TODO
    // id == -1 等待任意一个子进程退出，等价于wait
    pid_t result = waitpid(id ,&status, 0);
    if(result > 0)
    {
      // 可以不这么干
      //printf("父进程：%d，退出信号：%d\n",(status>>8)&0xff,status & 0x7f);
      if(WIFEXITED(status))
      {
        // 子进程是正常退出的
        printf("子进程退出， 退出码为：%d\n",WEXITSTATUS(status));
      }
      else 
      {
        printf("子进程退出异常，退出码为：%d\n",WIFEXITED(status));
      }
    }
  }
  return 0;
}









int main1()
{
  // 为什么创建子进程
  // 为了不影响父进程
  // 想让父进程聚焦在读取数据，解析数据，指派进程执行代码的功能
 
  pid_t id = fork();
  if(!id)
  {
    // 子进程
    printf("子进程开始运行，pid: %d\n",getpid());
    sleep(3);
    char* const _avr[] = {
      (char*)"ls",
      (char*)"-a",
      (char*)"-l",
      NULL 
    };
    // execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
    // execv("/usr/bin/ls", _avr);
    
    // execlp("ls", "ls", "-a", "-l", NULL);
    
    // execvp("ls", _avr);
    
    execl(file, "mycmd", "-b", NULL);
    

    exit(1);
  }
  else 
  {
    // 父进程
    printf("父进程开始运行，pid: %d\n",getpid());
    int status = 0;
    pid_t id = waitpid(-1, &status, 0);// 阻塞等待
    if(id > 0)
      printf("wait success ,exit id: %d\n",WEXITSTATUS(status));
  }
  return 0;
}



int dsain()
{
  printf("代码开始\n");
  //execl("/usr/bin/ls", "ls", NULL);
  //execl("/usr/bin/ls", "ls", "-l", "-a", "-i" , NULL);
  execl("/usr/bin/ls", "ls", "-l", "-a", "-i" , NULL);
  //execl("/usr/bin/top", "top", NULL);


  printf("代码结束\n");
  return 0;
}








